perm filename QDOFU.F4[MUS,LCS] blob sn#102056 filedate 1974-05-10 generic text, type T, neo UTF8
00100		SUBROUTINE QUADO
00200		COMMON XS(100),YS(100),N,X1(512),Y1(512),QS(100),K
00220		COMMON/RD/ TM(50),SP1(50),SP2(50),SFAC(512)/XX/F(5,512)
00280		COMMON/DP/IP(1),ISU(1400)
00300		DIMENSION ARY(9),FAC(4)
00500	       DATA  ARY/45H(' ARRAY F',I2,'(512); SEG(F',I2,');0  999')  /
00900	C  /DEG OR X/DIS OR Y/CEN OF CIRC X/CEN OF CIRCLE Y/(CALLS QUAD)/
01000		EQUIVALENCE(XA,FAC(1)),(XB,FAC(2)),(XC,FAC(3)),(XD,FAC(4))
01110		ARY(3)=5H',I1,
01155		ARY(7)=5HI1,')
01170		TIME1=0
01200		XC=0
01300		XD=0
01400		JTIME=64
01600	C COUNTER IS TO 0 1ST CELL OF DPPLR ARRAY(SPD IS NOT KNOWN YET)
01700	
01800	
01900	CC	GO TO 1
02000	
02100	
02200	CC	IF(NL.EQ.-14.OR.NL.EQ.-16)GO TO 1
02210	C  NEXT FOR CIRCLES**********
02300	C   -14 OR -16=X,Y SYSTEM
02400	CC	DG=P(IPAR-4)
02500	C   DG=DEGREES
02600	CC	DIS=P(IPAR-3)
02700	C   RADIUS OF CIRCLE
02800	CC	XX=P(IPAR-2)
02900	CC	YY=P(IPAR-1)
03000	C   XX,YY IS CENTER OF CIRCLE
03100	CC	X=DIS*SIND(DG)+XX
03200	CC	Y=DIS*COSD(DG)+YY
03500	CC	GO TO 6
03600	
03700	1	DO 5 KQ=1,512
03750		FX=SFAC(KQ)
03760	CC	KF2=SFAC(KQ+1)
03770	CC	IF(KQ.EQ.512)KF2=512
03775		FX=KQ
03777	C******************
03780		KF=FX
03800		X=X1(KF)
03900		Y=Y1(KF)
04000		IF(KQ.NE.JTIME)GO TO 6
04005		J=X*10
04007		K=Y*10
04010		CALL AIVECT(J,K)
04100	C  PUTS MARK EACH 1/8 OF PATH (NONE AT START)
04110		CALL AVECT(J+7,K)
04120		CALL AVECT(J+7,K+7)
04130		CALL AVECT(J,K+7)
04140		CALL AVECT (J,K)
04240		JTIME=JTIME+64
04300	6	DIS=SQRT(X**2+Y**2)
04310	CC	DISNXT=SQRT(X1(KF2)**2+Y1(KF2)**2)
04320	CC	DIS=DIS+(FX-KF)*(DISNXT-DIS)
04330	C  FOR VARIABLE SPEED THROUGH ARRAY. INTERPOLATES BETWEEN POINTS.
04400	C   DIST. OF SOUND FROM LISTENER
04500		IQUAD=1
04600		S=X
04700		T=Y
04800		XX=ABS(X)
04900		YY=ABS(Y)
05000	C   NEXT FINDS QUADRANT
05100		IF(X.LT.YY)GO TO 7
05200		IQUAD=2
05300		S=-Y
05400		T=X
05500		GO TO 3
05600	7	IF(-Y.LT.XX)GO TO 4
05700		IQUAD=3
05800		S=-X
05900		T=-Y
06000		GO TO 3
06100	4	IF(-X.LE.YY)GO TO 3
06200		IQUAD=4
06300		S=Y
06400		T=-X
06500	3	XA=.5-S/(T*2)
06600		XB=1-XA
06700	C   % OF SNUND IN EACH "FRONT" SPEAKER
06800		IF(DIS.GE.14.14215)GO TO 30
06900	C   OUTSIDE OF SPEAKER CIRCLE, THEN JUMP
07000	CC	X=1-DIS/14.14215
07100		X=(1-DIS/14.14215)**2
07200	C   FACTOR (OR TRY? (1-DIS/14.14215)**2  )
07300		XA=XA+(1-XA)*X
07400		XB=XB+(1-XB)*X
07500		XC=XB*X
07600		XD=XA*X
07700	C   SUM OF FACTORS WILL BE FROM 1(AT EDGE) TO 4(AT CENTER)
07800		GO TO 31
07900	30	X=1-((DIS-14.14215)/DIS)**2
08000	C   OUTSIDE CIRCLE (TRY ALSO SANS **)
08100		XA=XA*X
08200		XB=XB*X
08300	C31	N=IPAR-5
08400	31	IQUAD=IQUAD-1
08500		DO 2 K=1,4
08600		J=IQUAD+K
08700		IF(J.GT.4)J=J-4
08800	2	F(J,KQ)=FAC(K)
08900	C  SETS DIR. SIG. MULTIPLIERS FOR EACH SPKR
09000		T=FX-TIME1
09100		V=(DIS1-DIS)/T
09200		F(5,KQ)=DIS1/(DIS1-V)
09300	C   F(5,N) IS FREQ MULTIPLIER FOR DOPPLER SHIFT
09400		TIME1=FX
09500		DIS1=DIS
09600	C   SAVE DIS AND TIME FOR NEXT TIME AROUND
09800	C   ZERO FREQ MULTIPLIER FIRST TIME.
09900	C   IN FUNCTION IT WILL BE MADE EQUAL TO SECOND SLOT
10000	5	CONTINUE
10100	C   CAN BE USED FOR 2 CHANS.  BUT 5 PARAMS STILL NEEDED.
10110		F(5,1)=0
10200	
10300	
10400		DO 777 K=512,1,-1
10500	777	IF(F(5,K).EQ.0)F(5,K)=F(5,K+1)
10600	C  FIXES UP ZERO MULTIPLIERS IN DOPPLER FUNC.
10700	77	M=1
10800		IB=-466
10900		J=256
11000		RM=200.
11100		DO 8 K=1,4
11200		IF(M.NE.2)GO TO 88
11300		M=5
11400		RM=300.
11500	C  TO ENLARGE DPY OF DOPPLER
11600		IB=-88
11700		J=106
11800	88	JB=F(M,1)*RM+J
11900	C   DRAWS DOPPLER FUNC.
12000		CALL AIVECT(IB,JB)
12100		DO 9 L=2,512,3
12200		I=IB+L/2
12300	C   REDUCES TO FIT 1/4 OF SCREEN
12400		JB=F(M,L)*RM+J
12500	9	CALL AVECT(I,JB)
12600		IF(M.NE.5)GO TO 99
12700		RM=200.
12800		M=2
12900		J=256
13000		IB=250
13100	C  GOES BACK TO DRAW SPKR B FUNC.
13200		GO TO 88
13300	99	M=M+1
13400		IB=250
13500		IF(M.EQ.3)J=-440
13600		IF(M.EQ.4)IB=-466
13700	8	CONTINUE
13800	
15500		CALL DPYOUT(1)
15600		TYPE 112
15700		ACCEPT 113,NAME,NJ,LB
15800	333	IF(LB.EQ.0)GO TO 130
15900	C   JUMP IF NOT SAVING DPY BUFFER
16000		IP(1)=IP(3)+2
16100	C   IP(3) IS REALLY ISU(2).  I.E. WDCNT
16200		CALL SAVB(IP)
16300	C   WRITES A BINARY FILE OF DPY BUFFER FOR "PLTVEC"
16400	130	IF(NAME.EQ.' '.OR.NAME.EQ.'B')RETURN
16800		REWIND  23
16900		CALL OFILE(23,NAME)
17000		DO 10 K=1,5
17100		IF(NJ.LT.10)GO TO 100
17200		ARY(3)=5H',I2,
17300		ARY(7)=5HI2,')
17400	100	WRITE(23,ARY)NJ,NJ
17500	101	WRITE(23,12)(F(K,N),N=1,512)
17600	10	NJ=NJ+1
17700		END FILE 23
17800		TYPE 114,NAME
18000	12	FORMAT(16F8.5/)
18100	112	FORMAT(' TYPE FILE NAME AND 1ST FUNC # --  '$)
18200	113 	FORMAT(A5,2I)
18300	114	FORMAT(' FUNCTIONS ARE IN ',A5,'.DAT'/)
18350		CALL EXIT
18400		END